package com.beeasy.hzbpm.work;

import com.github.llyb120.json.Obj;

import java.util.Collection;
import java.util.List;

import static com.github.llyb120.json.Json.a;

public interface WorkMode {
    /**
     * 检查一个用户是否是超级管理员
     * @param uid
     * @return
     */
    boolean isSu(String uid);


    /**
     * 得到一个用户的真实姓名
     * @param uid
     * @return
     */
    String getUserCacheName(String uid);


    /**
     * 得到一堆用户的真实姓名
     * @param uids
     * @return {
     *     id: true_name
     * }
     */
    Obj getUserNamesMap(Collection<String> uids);


    /**
     * 得到所有的角色列表
     * 返回类型如下
     * @return [
     *  {text: '', id: '', parent_id: null} //角色的parent_id必定为null
     * ]
     */
    List<Obj> getRoleList();

    /**
     * 返回同上 getRoleList
     * @return
     */
    List<Obj> getDepList();


    /**
     * 插入一条流程日志
     * @param uid 用户ID
     * @param msg 日志内容
     * @return 是否插入成功
     *
     * 参考Log.log的内容
     */
    void addLog(String uid, String msg);


    /**
     * 得到一个用户的手机号
     *
     * @param uid
     * @return
     */
    default String getPhone(String uid){
        List<String> list = getPhones(a(uid));;
        if(list.isEmpty()){
            return "";
        } else {
            return (String) list.get(0);
        }
    }

    /**
     * 得到一坨用户的手机号
     *
     * @param uids
     * @return 字符串列表
     */
    List<String> getPhones(Collection<String> uids);


    /**
     * 得到部门和角色列表
     *
     * @param ids 部门/角色ID
     * @return [
     *  {
     *      id: "",
     *      name: ""
     *  }
     * ]
     */
//    @Deprecated
//    List<Obj> getOrgList(Collection<String> ids);
    List<Obj> getDepList(Collection<String> ids);
    List<Obj> getRoleList(Collection<String> ids);

    /**
     * 得到用户列表
     *
     * @param ids
     * @return [
     *  {id： "", true_name: ""}
     * ]
     */
    List<Obj> getUserNameList(Collection<String> ids);


    /**
     * 得到一个用户的所有角色ID
     *
     * @return 字符串列表
     */
    List<String> getUserRoleIds(String uid);


    /**
     * 通过一坨部门/岗位得到用户的ID
     *
     * @param oid
     * @return 字符串列表
     */
//    List<String> getOrgUserIds(Collection<String> oid);
    List<String> getRoleUserIds(Collection<String> oid);


    /**
     * 查找部门人员-新版关联
     * @return [
     *  {
     *      utname:""//true_name
     *      uname: "" //username
     *      uid: ""
     *      phone: "",
     *      type: "" //USER 人员
     *  }
     * ]
     */
    List<Obj> getDepUsersNew(String did);

    /**
     * 同上 getDepUsersNew
     * @param did
     * @return [
     *  {
     *      utname:""//true_name
     *      uname: "" //username
     *      uid: ""
     *      otype: "ROLE" //ROLE
     *  }
     */
    List<Obj> getRoleUsersNew(String did);


    /**
     * 得到一坨部门的主管
     *
     * @return
     */
    List<String> getManagersFromDeps(Collection<String> dids);


    List<Obj> getNextNodeDealers(SmartChooseOption option);

    /**
     * 通过关键字检索用户
     *
     * @param keyword
     * @return
     */
    List<Obj> searchUserByKeyword(String keyword);
}
